SVG ( Scalable Vector Graphics ) 是 XML 的格式,可以用來繪製向量圖形,相較圖片來說,放大縮小時不會糊掉,適合使用在不需豐富色彩的幾何圖形
我們需要使用 SVG 時,可直接新增 svg
元素,並設定寬度與高度
<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
<rect width="100" height="100" fill="black" />
</svg>
svg
內的 xmlns="http://www.w3.org/2000/svg"
是命名空間,不寫也是可以的,新增 svg
後便可在內部開始繪製圖形,其繪製方法與 css
有一些不同,以下介紹圖形繪製方法
<rect x="5" y="5" rx="10" ry="10" width="30" height="30" />
X
: 矩形左上角的 X 軸位置y
: 矩形左上角的 Y 軸位置width
: 矩形的寬度height
: 矩形的高度rx
: 矩形圓角的 X 軸半徑ry
: 矩形圓角的 Y 軸半徑<circle cx="35" cy="35" r="30" />
r
: 圓形的半徑cx
: 圓心的 X 軸位置cy
: 圓形的 Y 軸位置<ellipse cx="35" cy="35" rx="30" ry="10" />
rx
: 橢圓形的 X 軸半徑ry
: 橢圓形的 Y 軸半徑cx
: 橢圓形中心的 X 軸位置cy
: 橢圓形中心的 Y 軸位置<line x1="10" x2="100" y1="10" y2="100" stroke="black" />
x1
: 直線起點的 X 軸位置y1
: 直線起點的 Y 軸位置x2
: 直線終點的 X 軸位置y2
: 直線終點的 Y 軸位置<polyline points="0 0,50 50, 100 0" fill="none" stroke="black" />
<polygon points="0 0,50 50, 100 0" fill="none" stroke="black" />
折線與多邊形皆是由 points
所繪製,每兩個座標為一組,分別代表 X
與 Y
座標,以逗號隔開,而兩者的差異在於,多邊形會將最後一點連回至起點,並封閉為一個圖形,而折線不會
<path d="M20 30 Q40 5,50 30 T90 30" fill="none" stroke="black" stroke-width="5" />
路徑繪圖可參考MDN,通過組合各種線條,基本上可以繪製出所有的圖形
M x y
: Move to,將畫筆移動至指定點,後面接 x 軸與 y 軸位置Z
: 封閉圖形,將最後一點連回至起點L x y
: Line to,畫一條線至指定點,後面接 x 軸與 y 軸位置H x
: 畫一條水平線,後面接 x 軸位置V y
: 畫一條垂直線,後面接 y 軸位置C x1 y1, x2 y2, x y
: 貝茲曲線,由兩個中介點與終點所組成,中間由逗號隔開S x2 y2, x y
: 接在 C
後方,產生與之前相同的曲線,再加上一個中介點與終點組成Q x1 y1, x y
: 二次貝茲曲線,由一個中介點與終點組成T x y
: 接在 Q
後方,產生與之前相同的曲線,後面接終點 x 軸與 y 軸位置A rx ry x-axis-rotation large-arc-flag sweep-flag x y
: 這個參數較多,稍微複雜一些
rx
: 圓的 x 軸半徑ry
: 圓的 y 軸半徑x-axis-rotation
: 圓旋轉的角度large-arc-flag
: 0 為角度較小的弧線,1 為角度較大的弧線sweep-flag
: 0 為逆時鐘,1 為順時鐘x
: 圓弧結束的 x 軸位置y
: 圓弧結束的 y 軸位置若 rx
與 ry
小於半徑,則改為以比例方式呈現
單純畫出路徑是看不到東西的,我們還要給它顏色與樣式,另外有些屬性可用 css
修改,有些則不行
<rect x="10" y="10" width="100" height="100"
stroke="blue" fill="purple"
fill-opacity="0.5" stroke-opacity="0.8"
stroke-width="5" />
<line x1="40" x2="120" y1="20" y2="20"
stroke="black" stroke-width="20"
stroke-linecap="butt" stroke-dasharray="3,5,7" />
fill
: 相當於 background-color
,可使用的顏色同 css
,預設為黑色fill-opacity
: 背景顏色的透明度stroke
: 相當於 border-color
,可使用的顏色同 css
stroke-opacity
: 邊框線的透明度stroke-width
: 邊框線寬度stroke-dasharray
: 將線條改為虛線,數字帶入線段距離與空白距離,以逗點分隔stroke-dashoffset
: 將線段往左或往右推移stroke-linecap
: 線條端點樣式,有 butt
、square
、round
共三種stroke-linejoin
: 線條接合樣式,有 miter
、round
、bevel
共三種圖形部份大概如上,之後就是如何應用了 ~